package de.unicornEntertainment.stundenplanapp.abwesenheitsnotiz;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.annotation.TargetApi;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;

import com.actionbarsherlock.app.SherlockActivity;

import de.unicornEntertainment.stundenplanapp.R;
import de.unicornEntertainment.stundenplanapp.login.ActivityLogin;
import de.unicornEntertainment.stundenplanapp.util.MyTools;

public class AbwesenheitsnotizActivity extends SherlockActivity {

	// Globale Deklaration
	private AbwesenheitsnotizActivity context = this;
	private DatePicker dpAb;
	private DatePicker dpBis;
	private String url = "http://gruppef.green-lagoon.de/login.php";
	private String url2 = "";
	private Button ok;
	private int y1;
	private int m1;
	private int d1;
	private int y2;
	private int m2;
	private int d2;
	private String von;
	private String bis;
	
	/**
	 * Wird erstmalig beim Start der Activity aufgerufen.
	 */
	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_abwesenheitsnotiz);

		// GUI-Elemente holen
		dpAb = (DatePicker)findViewById(R.id.abwesenheitsnotiz_datepickerAb);
		dpBis = (DatePicker)findViewById(R.id.abwesenheitsnotiz_datepickerBis);
		ok = (Button) findViewById(R.id.abwesenheitsnotiz_buttonAbsenden);
		
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
			dpAb.setCalendarViewShown(false);
			dpBis.setCalendarViewShown(false);
	    }
		
		// Kalender erzeugen => benötigt für Beginndatum der Abwesenheit
		Calendar cal=Calendar.getInstance();
		int year=cal.get(Calendar.YEAR);
		int month=cal.get(Calendar.MONTH);
		int day=cal.get(Calendar.DAY_OF_MONTH);

		dpAb.updateDate(year, month, day);
//		dpAb.setEnabled(false);
		
		y1 = dpAb.getYear();
		m1 = dpAb.getMonth();
		d1 = dpAb.getDayOfMonth();
		y2 = dpBis.getYear();
		m2 = dpBis.getMonth();
		d2 = dpBis.getDayOfMonth();
		
		
		
//		System.out.println("y1: " + y1 + "\n y2: " + y2);
		
		von = ""+y1+"-"+(m1+1)+"-"+d1;
//		System.out.println(""+von);
		bis = ""+y2+"-"+(m2+1)+"-"+d2;
//		System.out.println(""+bis);
		
		url2 += url + "?user=" + ActivityLogin.getUser() + "&passwort=" + ActivityLogin.getPass() + "&head=abwesenheitsnotiz" + "&abwesendAb=" + von + "&abwesendBis=" + bis;
//		System.out.println("URL-Abwesenheitsnotiz: " + url);
		
		// OnClickListener auf Button setzen
		ok.setOnClickListener(new OnClickListener() {
			/**
			 * Wird bei Klick auf Button "Absenden" ausgeführt.
			 */
			@Override
			public void onClick(View v) {
				
				y1 = dpAb.getYear();
				m1 = dpAb.getMonth();
				d1 = dpAb.getDayOfMonth();
				y2 = dpBis.getYear();
				m2 = dpBis.getMonth();
				d2 = dpBis.getDayOfMonth();
				
				boolean sve = false;
				
				sve = startdatumVorEnddatum(d1, d2, m1, m2, y1, y2);
				
				if (new MyTools(context).isInternetVerfuegbar() && sve) {
					new AsyncTask() {
						
						boolean done = false;

						@Override
						protected Object doInBackground(Object... params) {
							
//							System.out.println("AsyncTask");
							
//							System.out.println("y1: " + y1 + "\n y2: " + y2);
							
							von = ""+y1+"-"+(m1+1)+"-"+d1;
//							System.out.println(""+von);
							bis = ""+y2+"-"+(m2+1)+"-"+d2;
//							System.out.println(""+bis);
							
							url2 = "";
							url2 += url + "?user=" + ActivityLogin.getUser() + "&passwort=" + ActivityLogin.getPass() + "&head=abwesenheitsnotiz" + "&abwesendAb=" + von + "&abwesendBis=" + bis;
//							System.out.println("URL-Abwesenheitsnotiz: " + url2);
							
							
							HttpClient httpclient = new DefaultHttpClient();
					        HttpResponse response;
					        String responseString = null;
					        try {
					            response = httpclient.execute(new HttpGet(url2));
					            StatusLine statusLine = response.getStatusLine();
					            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
					                ByteArrayOutputStream out = new ByteArrayOutputStream();
					                response.getEntity().writeTo(out);
					                out.close();
					                responseString = out.toString();
					                done = true;
					            } 
					            else if (statusLine.getStatusCode() != HttpStatus.SC_OK) {
									done = false;
								}
					            else{
					                //Closes the connection.
					                response.getEntity().getContent().close();
					                throw new IOException(statusLine.getReasonPhrase());
					            }
					        } 
					        catch (ClientProtocolException e) {
					            //TODO Handle problems..
					        }
					        catch (IOException e) {
					            //TODO Handle problems..
					        }
							return null;
						};
						
						/**
						 * Ausgabe im UI-Thread.
						 */
						@Override
						protected void onPostExecute(Object result) {
							if (done) {
								Toast.makeText(context, "Abwesenheit erfolgreich übermittelt!", Toast.LENGTH_LONG).show();
							}
							else {
								Toast.makeText(context, "Abwesenheit nicht erfolgreich übermittelt! Bitte erneut versuchen.", Toast.LENGTH_LONG).show();
							}
						}
					}.execute();
				}
				else {
					if (!new MyTools(context).isInternetVerfuegbar()) {
						Toast.makeText(context, "Keine Verbindung zum Internet vorhanden! Bitte eine Verbindung mit dem Internet herstellen und danach erneut versuchen.", Toast.LENGTH_LONG).show();
					}
					else if (!sve) {
						Toast.makeText(context, "Ende darf nicht vor Beginn liegen!", Toast.LENGTH_LONG).show();
					}
				}
			}
		});
	}
	
	private boolean startdatumVorEnddatum(int d1, int d2, int m1, int m2, int y1, int y2) {
		
		Date von = new Date(y1, m1, d1);
		Date bis = new Date(y2, m2, d2);
		
		if (bis.getTime() >= von.getTime()) {
			return true;
		}
		else {
			return false;
		}
	}
}
